home *** CD-ROM | disk | FTP | other *** search
- #if 0
- ●スクロールバー付属の数値表示の更新
- static void setParaSoftMsg(int bRedraw)
- static void setParaRoughMsg(int bRedraw)
- static void setParaWaitMsg(int bRedraw)
-
- ●モジュールの初期化・終了
- int init_movfile(void)
- void end_movfile(void)
-
- ●MOVファイル作成中に呼ばれる通信関数
- static int movfile_loadframe(char *buf, int nFrame,
- int *nWidth, int *nHeight)
- static int movfile_recsucceed(int nFrame)
-
- ●MOVファイル作成(デスクトップメニューから呼び出される)
- int movfile_checkRec(void)
- void movfile_rec(void)
-
- ●MOVファイル再生(デスクトップメニューから呼び出される)
- void movfile_play(void)
-
-
- #endif
-
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <winb.h>
- #include <te.h>
- #include <fntb.h>
- #include <gui.h>
- #include <wgb.h>
- #include <msdos.cf>
- #include <file_dlg.h>
- #include <snd.h>
- #include <egb.h>
-
- #include "morph.h"
- #include "desktop.h"
- #include "points.h"
- #include "wgbmac.h"
- #include "guisub.h"
- #include "image.h"
- #include "fifo.h"
- #include "domorph.h"
- #include "imstore.h"
- #include "morphgo.h"
- #include "alert.h"
- #include "sub.h"
- #include "movfile.h"
- #include "ugoku.h"
-
- #include "makemov.h"
-
- int idMovRecWin = -1 ;
- int idMovRecParaSoftSBar = -1 ;
- int idMovRecParaRoughSBar = -1 ;
- int idMovRecPremoveTIcon[2] = {-1,-1} ;
- int idMovRecParaWaitSBar = -1 ;
- int idMovRecParaSoftMsg = -1 ;
- int idMovRecParaRoughMsg = -1 ;
- int idMovRecParaWaitMsg = -1 ;
- int idMovRecOkDBtn = -1 ;
- int idMovRecCancelDBtn = -1 ;
- int idMovRecOkMsg = -1 ;
- int MovRecCancelMsg = -1 ;
- int idMovRecInfoMsg = -1 ;
- int idMovRecSucceedWin = -1 ;
- int idMovRecSucceedMsg = -1 ;
- int idMovRecAddWin = -1 ;
- int idMovRecAddDBtn[3] = -1 ;
-
- static int nParaPremove = 0; // 0:あり 1:なし
- static int nParaSoft = 0;
- static int nParaRough = 3;
- static int nParaWait = 0;
-
- /*--------------------------------------------------------*/
- /* スクロールバー付属の数値表示の更新 */
- /*--------------------------------------------------------*/
-
- static void setParaSoftMsg(int bRedraw)
- {
- static char msg[3];
- sprintf(msg,"%2d",nParaSoft);
- MMI_SendMessage(idMovRecParaSoftMsg, MM_SETMSG, 1, msg);
- if (bRedraw)
- MMI_SendMessage(idMovRecParaSoftMsg, MM_SHOW, 0);
- }
-
- static void setParaRoughMsg(int bRedraw)
- {
- static char msg[3];
- sprintf(msg,"%2d",nParaRough);
- MMI_SendMessage(idMovRecParaRoughMsg, MM_SETMSG, 1, msg);
- if (bRedraw)
- MMI_SendMessage(idMovRecParaRoughMsg, MM_SHOW, 0);
- }
-
- static void setParaWaitMsg(int bRedraw)
- {
- static char msg[3];
- sprintf(msg,"%2d",nParaWait);
- MMI_SendMessage(idMovRecParaWaitMsg, MM_SETMSG, 1, msg);
- if (bRedraw)
- MMI_SendMessage(idMovRecParaWaitMsg, MM_SHOW, 0);
- }
-
- /*--------------------------------------------------------*/
- /* モジュールの初期化・終了 */
- /*--------------------------------------------------------*/
-
- int init_movfile(void)
- {
- RM_initRadioButton(idMovRecPremoveTIcon,INTNUM(idMovRecPremoveTIcon),
- &nParaPremove);
- RM_setScrollRange(idMovRecParaSoftSBar, 1, 17, FALSE);
- RM_setScrollPos(idMovRecParaSoftSBar, nParaSoft, FALSE);
- setParaSoftMsg(FALSE);
- RM_setScrollRange(idMovRecParaRoughSBar, 1, 17, FALSE);
- RM_setScrollPos(idMovRecParaRoughSBar, nParaRough, FALSE);
- setParaRoughMsg(FALSE);
- RM_setScrollRange(idMovRecParaWaitSBar, 1, 100, FALSE);
- RM_setScrollPos(idMovRecParaWaitSBar, nParaWait,FALSE);
- setParaWaitMsg(FALSE);
- return 0;
- }
-
- void end_movfile(void)
- {
- }
-
- /*--------------------------------------------------------*/
- /* フレームデータをMOV保存ルーチンに渡す */
- /*--------------------------------------------------------*/
-
- static int movfile_loadframe(char *buf, int nFrame,
- int *nWidth, int *nHeight)
- // buf : 320×240×2バイトのバッファ
- {
- IMAGE *pi;
- if (nFrame >= imstore_getFrameNum())
- return -1;
- pi = imstore_getFrame(nFrame);
- int i;
- memset(buf,0,320*240*2);
- for (i=0; i<_min(240,pi->virht); i++)
- {
- memcpy(buf+320*2*i, pi->image+pi->width*2*i,
- _min(pi->virwid,320)*2);
- }
- if (nWidth != NULL)
- *nWidth = pi->virwid;
- if (nHeight != NULL)
- *nHeight = pi->virht;
- return 0;
- }
-
- static int movfile_recsucceed(int nFrame)
- {
- static char msg[100];
- sprintf(msg," フレーム %d / %d ", nFrame+1, imstore_getFrameNum());
- MMI_SendMessage(idMovRecSucceedMsg, MM_SETMSG, 1, msg);
- MMI_SendMessage(idMovRecSucceedMsg, MM_SHOW, 0);
- return 0;
- }
-
- /*--------------------------------------------------------*/
- /* MOVファイル作成(デスクトップメニューから呼び出し) */
- /*--------------------------------------------------------*/
-
- static int bExec;
- static int nAddSelect;
-
- int movfile_checkRec(void)
- {
- if (imstore_getFrameNum() <= 0)
- return -1;
- else
- return 0;
- }
-
- void movfile_rec(void)
- {
- if (imstore_getFrameNum() <= 0)
- {
- dispAlertMessage("動画ファイル(MOV)作成",
- "動画倉庫に画像が登録されていないので、動画ファイルを"
- "作成することができません");
- return;
- }
- // MOVファイルパラメータの設定
- {
- // ドット数、フレーム数の表示
- static char msg[70];
- if (imstore_getFrameNum() > 0)
- {
- IMAGE *pi = imstore_getFrame(0);
- sprintf(msg, " %d×%d pixels, %d frame(s) ",
- pi->virwid, pi->virht, imstore_getFrameNum());
- }
- else
- strcpy(msg, " ");
- MMI_SendMessage(idMovRecInfoMsg, MM_SETMSG, 1, msg);
- }
- bExec = 0;
- MORPH_dispWinAlert(idMovRecWin);
- MMI_ExecSystem();
- MORPH_eraseWinAlert(idMovRecWin);
- if (!bExec)
- return;
- // ファイル名の入力
- int ret;
- char pathbuf[100];
- ret = RM_callSimpleFDG(idDesktopAlertHyper, idDesktopSelectiveHyper,
- "動画(MOV)作成", "作成", "取消",
- "*.MOV", FDG_FILEONLY|FDG_TEXT, pathbuf);
- if (ret != 0)
- return; // 「取消」
- char drive[_MAX_DRIVE+2],dir[_MAX_DIR+2],basename[_MAX_FNAME+2],
- ext[_MAX_EXT+2];
- _splitpath(pathbuf, drive, dir, basename, ext);
- _makepath(pathbuf, drive, dir, basename, "MOV");
- // 既存ファイル存在のチェック
- nAddSelect = 1;
- if (fexist(pathbuf))
- {
- MORPH_dispWinAlert(idMovRecAddWin);
- MMI_ExecSystem();
- MORPH_eraseWinAlert(idMovRecAddWin);
- if (nAddSelect == 2)
- return; // 「取消」ボタン
- }
- // MOVファイルの作成(進行状況も表示)
- int moscsr;
- MG_PushPtr(MOSICON_WAIT, &moscsr);
- MORPH_dispWinAlert(idMovRecSucceedWin);
- MOVPARA para;
- para.soft = nParaSoft;
- para.rough = nParaRough;
- para.premove = (nParaPremove == 0 ? 1 : 0);
- para.wait = nParaWait;
- para.add = (nAddSelect == 0 ? 1 : 0);
- int err;
- err = mov_save(pathbuf, imstore_getFrameNum(),
- movfile_loadframe, movfile_recsucceed, ¶);
- MORPH_eraseWinAlert(idMovRecSucceedWin);
- MG_PopPtr(moscsr);
- if (err == -2)
- alert_noMemory("動画(MOV)ファイル作成");
- }
-
- /*--------------------------------------------------------*/
- /* MOV再生中のチェック関数 */
- /*--------------------------------------------------------*/
-
- int movfile_playcheck()
- {
- int sw;
-
- /* 注意:sw 押されているとbit off 押されてないとbit on */
-
- SND_joy_in_1( 0xff, &sw ); /* end check */
- sw = (sw ^ 0xff) & 0x30;
- if( sw == 0 )return 0;
- c01: SND_joy_in_1( 0xff, &sw );
- sw = (sw ^ 0xff) & 0x30;
- if( sw & 0x10 ){
- while( sw == 0x30 ){
- SND_joy_in_1( 0xff, &sw );
- sw = (sw ^ 0xff) & 0x30;
- }
- if( sw == 0x20 )goto c02;
- while( sw ){
- SND_joy_in_1( 0xff, &sw );
- sw = (sw ^ 0xff) & 0x30;
- if( sw == 0x30 )break;
- }
- return 1;
- }
- c02: if( sw )goto c01;
- return -1;
- }
-
- /*--------------------------------------------------------*/
- /* MOVファイル再生(called from desktop) */
- /*--------------------------------------------------------*/
-
- void movfile_play(void)
- {
- int err;
- err = 0;
- // ファイル名の入力
- int ret;
- char pathbuf[100];
- ret = RM_callSimpleFDG(idDesktopAlertHyper, idDesktopSelectiveHyper,
- "動画(MOV)再生", "再生", "取消",
- "*.MOV", FDG_FILEONLY, pathbuf);
- if (ret != 0)
- return; // 「取消」
- MMI_SendMessage(MMI_GetBaseObj(), MM_ERASE, 0);
- MG_mosDisp(2);
- // 画面の設定
- EGB_writePage(guiEgbPtr, 0);
- EGB_color(guiEgbPtr, 1, 0); // backcolor
- EGB_clearScreen(guiEgbPtr);
- EGB_writePage(guiEgbPtr, 1);
- // 再生
- int nFrame,x0,y0,x1,y1,wsize;
- if (mov_disk_play_init(pathbuf, movfile_playcheck, &nFrame,
- &x0,&y0,&x1,&y1,&wsize) != 0)
- goto END;
- char *work;
- if ((work = TL_malloc(wsize+320*240*2)) == NULL)
- {err = -2; goto END;}
- int s ;
- SND_get_elevol_mute( &s ) ;
- SND_elevol_mute( s | 0x03 ) ;
- EGB_displayStart(guiEgbPtr,3,0,0);
- EGB_displayStart(guiEgbPtr,2,2,2);
- int wid,ht;
- wid = _min(320,x1-x0+1);
- ht = _min(240,y1-y0+1);
- EGB_displayStart(guiEgbPtr,0,(320-wid)/2,(240-ht)/2);
- EGB_displayStart(guiEgbPtr,1,0,0);
- EGB_displayStart(guiEgbPtr,3,320-(320-wid)/2,240-(240-ht)/2);
- mov_disk_play_repeat(work,work+153600,pathbuf,1,0,-1);
- EGB_displayStart(guiEgbPtr,3,0,0);
- EGB_displayStart(guiEgbPtr,2,2,2);
- EGB_displayStart(guiEgbPtr,0,0,0);
- EGB_displayStart(guiEgbPtr,1,0,0);
- EGB_displayStart(guiEgbPtr,3,320,240);
- SND_elevol_mute( s ) ;
- TL_free(work);
- END:
- EGB_writePage(guiEgbPtr, 0);
- MG_mosDisp(3);
- MMI_SendMessage(MMI_GetBaseObj(), MM_SHOW, 0);
- if (err == -2)
- alert_noMemory("動画(MOV)ファイル再生");
- }
-
- /*--------------------------------------------------------*/
- /* 部品の呼び出し関数 */
- /*--------------------------------------------------------*/
-
- /* initDataZMOVFILE:idMovRecWin:MJ_WINDOWL40の呼び出し関数 */
- int MovRecFunc(kobj, messId, argc, pev, trigger)
- int kobj ;
- int messId ;
- int argc ;
- EVENT *pev ;
- int trigger ;
- {
- return NOERR ;
- }
-
- /* initDataZMOVFILE:idMovRecParaSoftSBar:MJ_SCRLL40の呼び出し関数 */
- int idMovRecParaSoftSBarFunc(kobj, messId, argc, pev, trigger)
- int kobj ;
- int messId ;
- int argc ;
- EVENT *pev ;
- int trigger ;
- {
- nParaSoft = RM_getScrollPos(kobj);
- setParaSoftMsg(TRUE);
- return NOERR ;
- }
-
- /* initDataZMOVFILE:idMovRecParaRoughSBar:MJ_SCRLL40の呼び出し関数 */
- int idMovRecParaRoughSBarFunc(kobj, messId, argc, pev, trigger)
- int kobj ;
- int messId ;
- int argc ;
- EVENT *pev ;
- int trigger ;
- {
- nParaRough = RM_getScrollPos(kobj);
- setParaRoughMsg(TRUE);
- return NOERR ;
- }
-
- /* initDataZMOVFILE:idMovRecPremoveTIcon[0]:MJ_TICONL40の呼び出し関数 */
- /* initDataZMOVFILE:idMovRecPremoveTIcon[1]:MJ_TICONL40の呼び出し関数 */
- int MovRecParaPremoveTIconFunc(kobj, messId, argc, pev, trigger)
- int kobj ;
- int messId ;
- int argc ;
- EVENT *pev ;
- int trigger ;
- {
- RM_pushRadioButton(kobj, idMovRecWin, idMovRecPremoveTIcon,
- INTNUM(idMovRecPremoveTIcon), &nParaPremove);
- desktop_checkActivity();
- return NOERR ;
- }
-
- /* initDataZMOVFILE:idMovRecParaWaitSBar:MJ_SCRLL40の呼び出し関数 */
- int idMovRecParaWaitSBarFunc(kobj, messId, argc, pev, trigger)
- int kobj ;
- int messId ;
- int argc ;
- EVENT *pev ;
- int trigger ;
- {
- nParaWait = RM_getScrollPos(kobj);
- setParaWaitMsg(TRUE);
- return NOERR ;
- }
-
- /* initDataZMOVFILE:idMovRecOkDBtn:MJ_DBUTTONL40の呼び出し関数 */
- int MovRecOkFunc(kobj, messId, argc, pev, trigger)
- int kobj ;
- int messId ;
- int argc ;
- EVENT *pev ;
- int trigger ;
- {
- bExec = 1;
- MMI_SetHaltFlag(TRUE);
- return NOERR ;
- }
-
- /* initDataZMOVFILE:idMovRecCancelDBtn:MJ_DBUTTONL40の呼び出し関数 */
- int MovRecCancelFunc(kobj, messId, argc, pev, trigger)
- int kobj ;
- int messId ;
- int argc ;
- EVENT *pev ;
- int trigger ;
- {
- bExec = 0;
- MMI_SetHaltFlag(TRUE);
- return NOERR ;
- }
-
- /* initDataZMOVFILE:idMovRecAddDBtn[0]:MJ_DBUTTONL40の呼び出し関数 */
- /* initDataZMOVFILE:idMovRecAddDBtn[1]:MJ_DBUTTONL40の呼び出し関数 */
- /* initDataZMOVFILE:idMovRecAddDBtn[2]:MJ_DBUTTONL40の呼び出し関数 */
- int MovRecAddDBtnFunc(kobj, messId, argc, pev, trigger)
- int kobj ;
- int messId ;
- int argc ;
- EVENT *pev ;
- int trigger ;
- {
- if (kobj == idMovRecAddDBtn[0])
- nAddSelect = 0;
- else if (kobj == idMovRecAddDBtn[1])
- nAddSelect = 1;
- else if (kobj == idMovRecAddDBtn[2])
- nAddSelect = 2;
- MMI_SetHaltFlag(TRUE);
- return NOERR ;
- }
-
-